from django.http import HttpResponse, HttpResponseRedirect
from django.template import loader
from django.db import connection
from django.utils.dateparse import parse_date
from django.urls import reverse
from datetime import datetime

def index(request):
    # 使用原生SQL查询所有数据
    with connection.cursor() as cursor:
        # cursor.execute('SELECT * FROM mydata')
        cursor.execute('SELECT * FROM CHECK_VIEW')
        datas = cursor.fetchall()

    # 获取列名
    columns = [column[0] for column in cursor.description]

    # 将元组列表转换为字典列表
    datas = [dict(zip(columns, data)) for data in datas]

    # 获取用户的排序选择，默认为 'asc'（从小到大）
    order = request.GET.get('order', 'asc')

    with connection.cursor() as cursor:
        cursor.execute('SELECT DISTINCT 批号 FROM CHECK_VIEW')
        distinct_batches = [row[0] for row in cursor.fetchall()]  # 这里得到的是批号列表，而不是字典

    # 根据用户的排序选择来排序 '批号'
    if order == 'desc':
        distinct_batches.sort(reverse=True)  # 由于是列表，不需要 key 函数
    else:
        distinct_batches.sort()  # 默认升序排序，可以省略不写

    # 渲染模板并传递数据
    template = loader.get_template('index.html')
    context = {
        'datas': datas,
        'distinct_batches': distinct_batches,  # 确保添加这行
    }
    return HttpResponse(template.render(context, request))

def filter_by_date(request):
    if request.method == 'POST':
        # 获取提交的日期参数
        date = request.POST.get('date')
        if date:
            # 解析日期参数为 datetime.date 对象
            parsed_date = datetime.strptime(date, '%Y-%m-%d').date()  # 这里已经是 date 对象，无需再次调用 .date()
            # 使用原生SQL进行日期过滤
            with connection.cursor() as cursor:
                cursor.execute('SELECT * FROM CHECK_VIEW WHERE 检验日期 = %s', [parsed_date])
                datas = cursor.fetchall()

            # 将元组列表转换为字典列表
            columns = [column[0] for column in cursor.description]
            datas = [dict(zip(columns, data)) for data in datas]
        else:
            datas = []
    else:
        # 如果不是 POST 请求，重定向到首页
        return HttpResponseRedirect(reverse('index'))

    # 渲染模板并传递过滤后的数据
    template = loader.get_template('index.html')
    context = {
        'datas': datas,
    }
    return HttpResponse(template.render(context, request))

def filter_by_batch(request):
    if request.method == 'POST':
        batch = request.POST.get('批号')
        if batch:
            # 使用原生SQL进行批号过滤
            with connection.cursor() as cursor:
                cursor.execute('SELECT * FROM CHECK_VIEW WHERE 批号 = %s', [batch])
                datas = cursor.fetchall()

            # 将元组列表转换为字典列表
            columns = [column[0] for column in cursor.description]
            datas = [dict(zip(columns, data)) for data in datas]
        else:
            datas = []
    else:
        # 如果不是 POST 请求，重定向到首页
        return HttpResponseRedirect(reverse('index'))

    # 渲染模板并传递过滤后的数据
    template = loader.get_template('index.html')
    context = {
        'datas': datas,
    }
    return HttpResponse(template.render(context, request))